home *** CD-ROM | disk | FTP | other *** search
/ Computer Inter@ctive 16 / Computer Interactive cdrom 16 - dic 98.iso / zdnetit / content / CLASSBLD.ZIP / Include / CB_CriticalUniqueValueTree.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-03-06  |  6.5 KB  |  186 lines

  1. #ifndef CB_CRITICAL_UNIQUEVALUETREE_H
  2. #define CB_CRITICAL_UNIQUEVALUETREE_H
  3.  
  4. #include <assert.h>
  5.  
  6. #include "CB_CriticalSection.h"
  7. #include "CB_UniqueValueTree.h"
  8.  
  9. // defines for include files
  10. #define RELATION_CRITICAL_UNIQUEVALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  11. private:\
  12.     ClassTo* _first##NameTo;\
  13.     int _count##NameTo;\
  14. \
  15. public:\
  16.     static CriticalSection _criticalSection##NameTo;\
  17. \
  18.     void Add##NameTo(ClassTo* item);\
  19.     void Remove##NameTo(ClassTo* item);\
  20.     void RemoveAll##NameTo();\
  21.     void DeleteAll##NameTo();\
  22.     void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  23.     ClassTo* GetFirst##NameTo();\
  24.     ClassTo* GetLast##NameTo();\
  25.     ClassTo* GetNext##NameTo(ClassTo* pos);\
  26.     ClassTo* GetPrev##NameTo(ClassTo* pos);\
  27.     int Get##NameTo##Count();\
  28.     ITERATOR_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  29.  
  30. #define RELATION_NOFILTER_CRITICAL_UNIQUEVALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  31. private:\
  32.     ClassTo* _first##NameTo;\
  33.     int _count##NameTo;\
  34. \
  35. public:\
  36.     static CriticalSection _criticalSection##NameTo;\
  37. \
  38.     void Add##NameTo(ClassTo* item);\
  39.     void Remove##NameTo(ClassTo* item);\
  40.     void RemoveAll##NameTo();\
  41.     void DeleteAll##NameTo();\
  42.     void Replace##NameTo(ClassTo* item, ClassTo* newItem);\
  43.     ClassTo* GetFirst##NameTo();\
  44.     ClassTo* GetLast##NameTo();\
  45.     ClassTo* GetNext##NameTo(ClassTo* pos);\
  46.     ClassTo* GetPrev##NameTo(ClassTo* pos);\
  47.     int Get##NameTo##Count();\
  48.     ITERATOR_NOFILTER_MULTI_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  49.  
  50. #define RELATION_CRITICAL_UNIQUEVALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  51. public:\
  52.     ClassFrom* _ref##NameFrom;\
  53.     ClassTo* _parent##NameFrom;\
  54.     ClassTo* _left##NameFrom;\
  55.     ClassTo* _right##NameFrom;\
  56. \
  57. public:\
  58.     ClassFrom* Get##NameFrom() { return _ref##NameFrom; };
  59.  
  60. // defines implementation
  61. #define INIT_CRITICAL_UNIQUEVALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  62. {\
  63.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  64.     INIT_UNIQUEVALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  65. }
  66.  
  67. #define EXIT_CRITICAL_UNIQUEVALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  68. {\
  69.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  70.     EXIT_UNIQUEVALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  71. }
  72.  
  73. #define REPLACE_CRITICAL_UNIQUEVALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  74. {\
  75.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  76.     REPLACE_UNIQUEVALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  77. }
  78.  
  79. #define INIT_CRITICAL_UNIQUEVALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  80. {\
  81.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  82.     INIT_UNIQUEVALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  83. }
  84.  
  85. #define EXIT_CRITICAL_UNIQUEVALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  86. {\
  87.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  88.     EXIT_UNIQUEVALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  89. }
  90.  
  91. #define REPLACE_CRITICAL_UNIQUEVALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  92. {\
  93.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  94.     REPLACE_UNIQUEVALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  95. }
  96.  
  97. #define METHODS_CRITICAL_UNIQUEVALUETREE_ACTIVE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  98.     CriticalSection ClassFrom##::_criticalSection##NameTo;\
  99. void ClassFrom##::Add##NameTo(ClassTo* item)\
  100. {\
  101.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  102.     METHOD_UNIQUEVALUETREE_ADD(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  103. }\
  104. \
  105. void ClassFrom##::Remove##NameTo(ClassTo* item)\
  106. {\
  107.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  108.     METHOD_UNIQUEVALUETREE_REMOVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  109. }\
  110. \
  111. void ClassFrom##::RemoveAll##NameTo()\
  112. {\
  113.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  114.     METHOD_UNIQUEVALUETREE_REMOVEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  115. }\
  116. \
  117. void ClassFrom##::DeleteAll##NameTo()\
  118. {\
  119.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  120.     METHOD_UNIQUEVALUETREE_DELETEALL(ClassFrom, NameFrom, ClassTo, NameTo) \
  121. }\
  122. \
  123. void ClassFrom##::Replace##NameTo(ClassTo* item, ClassTo* newItem)\
  124. {\
  125.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  126.     METHOD_UNIQUEVALUETREE_REPLACE(member, ClassFrom, NameFrom, ClassTo, NameTo) \
  127. }\
  128. \
  129. ClassTo* ClassFrom##::GetFirst##NameTo()\
  130. {\
  131.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  132.     METHOD_UNIQUEVALUETREE_GETFIRST(ClassFrom, NameFrom, ClassTo, NameTo) \
  133. }\
  134. \
  135. ClassTo* ClassFrom##::GetLast##NameTo()\
  136. {\
  137.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  138.     METHOD_UNIQUEVALUETREE_GETLAST(ClassFrom, NameFrom, ClassTo, NameTo) \
  139. }\
  140. \
  141. ClassTo* ClassFrom##::GetNext##NameTo(ClassTo* pos)\
  142. {\
  143.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  144.     METHOD_UNIQUEVALUETREE_GETNEXT(ClassFrom, NameFrom, ClassTo, NameTo) \
  145. }\
  146. \
  147. ClassTo* ClassFrom##::GetPrev##NameTo(ClassTo* pos)\
  148. {\
  149.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  150.     METHOD_UNIQUEVALUETREE_GETPREV(ClassFrom, NameFrom, ClassTo, NameTo) \
  151. }\
  152. \
  153. int ClassFrom##::Get##NameTo##Count()\
  154. {\
  155.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  156.     METHOD_UNIQUEVALUETREE_GETCOUNT(ClassFrom, NameFrom, ClassTo, NameTo) \
  157. }
  158.  
  159. #define METHODS_CRITICAL_UNIQUEVALUETREE_PASSIVE(ClassFrom, NameFrom, ClassTo, NameTo)
  160.  
  161. #define BODY_CRITICAL_UNIQUEVALUETREE_FIND(member, value, ClassFrom, NameFrom, ClassTo, NameTo) \
  162. {\
  163.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  164.     BODY_UNIQUEVALUETREE_FIND(member, value, ClassFrom, NameFrom, ClassTo, NameTo) \
  165. }
  166.  
  167. #define BODY_CRITICAL_UNIQUEVALUETREE_FINDREVERSE(member, value, ClassFrom, NameFrom, ClassTo, NameTo) \
  168. {\
  169.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  170.     BODY_UNIQUEVALUETREE_FINDREVERSE(member, value, ClassFrom, NameFrom, ClassTo, NameTo) \
  171. }
  172.  
  173. #define WRITE_CRITICAL_UNIQUEVALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  174. {\
  175.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  176.     WRITE_UNIQUEVALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  177. }
  178.  
  179. #define READ_CRITICAL_UNIQUEVALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  180. {\
  181.     CriticalSectionLock lock(ClassFrom::_criticalSection##NameTo);\
  182.     READ_UNIQUEVALUETREE_ACTIVE(ClassFrom, NameFrom, ClassTo, NameTo) \
  183. }
  184.  
  185. #endif
  186.